package main

import (
	"fmt"
	"io"
	"os"
	"time"

	"github.com/gin-gonic/gin"
)

func main() {
	// 禁用控制台颜色
	gin.DisableConsoleColor()

	// 将日志同时写入文件和控制台，请使用以下代码 f 表示文件，os，os.Stdout 表示终端
	f, _ := os.Create("gin.log")
	gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

	// 生成gin实例,即 WSGI 应用程序
	r := gin.New()

	// 自定义日志格式
	// LoggerWithFormatter 中间件会将日志写入 gin.DefaultWriter
	// By default =>  gin.DefaultWriter = os.Stdout
	r.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
		// 自定义格式
		return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
			param.ClientIP,
			param.TimeStamp.Format(time.RFC1123),
			param.Method,
			param.Path,
			param.Request.Proto,
			param.StatusCode,
			param.Latency,
			param.Request.UserAgent(),
			param.ErrorMessage,
		)
	}))
	r.Use(gin.Recovery())

	// 声明了一个路由及对应的处理函数 (匿名函数)
	r.GET("/log", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"code": "200", "msg": "Test gin logs", "data": "",
		})
	})

	r.Run()

}
